home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
Requester
/
EDIT_WINDOW.LST
< prev
next >
Wrap
File List
|
1989-06-01
|
10KB
|
311 lines
@aufruf
> PROCEDURE aufruf
n|=5
DIM text$(n|)
text$(1)="Name"
text$(2)="Vorname"
text$(3)="Straße"
text$(4)="Postleitzahl"
text$(5)="Stadt"
PRINT "0123456789"
PRINT "0123456789"
PRINT "0123456789"
PRINT "0123456789"
GET 0,0,80,32,grafik$
CLS
FOR j=1 TO 5
FOR i=1 TO 6
PUT i*80,j*32,grafik$
NEXT i
NEXT j
edit_box(100,35,"Geben Sie nun Ihre Adresse ein!",90,35,n|,text$())
'
FOR i=1 TO n|
PRINT edit$(i),LEN(edit$(i))
NEXT i
'
REPEAT
UNTIL MOUSEK=1 OR INKEY$=CHR$(13)
RETURN
'
> PROCEDURE edit_box(x%,y|,u$,g_x%,g_y|,n|,VAR text$())
LOCAL ma|,t_breite%,u_breite%,f_breite%,b_breite%,b_hÖhe%,hintergrund$
LOCAL i|,j|,e_x%,e_y|,ex%,xl1%,xl2%,yl1|,yl2|,xr1%,xr2%,yr1|,yr2|,char|
LOCAL zeichen&,zeile|,spalte|,taste$,taste|,ende!,cursor$,rechts|,abbruch!
DIM edit$(n|),edit|(n|,100),zeiger_c|(n|),zeiger_z|(SUCC(n|))
abbruch!=FALSE
ende!=FALSE
'
ma|=LEN(text$(1))
FOR i|=2 TO n|
ma|=MAX(ma|,LEN(text$(i|)))
NEXT i|
MUL ma|,8
'
t_breite%=10+ma|+16+15*8+10
u_breite%=LEN(u$)*8
f_breite%=2*144+8+30
b_breite%=MAX(t_breite%,u_breite%+10,f_breite%+30,g_x%+10)
b_hÖhe%=10+g_y|+n|*12+12+20 !geändert
'
OPENW #0
OPENW #1,x%,y|,b_breite%+10,b_hÖhe%+15,&H4008,&H1002
COLOR 1
z$=SPACE$(((b_breite%+10)/8-LEN(u$))/2)
TITLEW #1,z$+u$+z$
'
x%=0
y|=10
BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
ADD x%,3
ADD y|,2
'
IF g_x%>0
PUT x%+b_breite%/2-g_x%/2,y|+10,grafik$
ENDIF
'
e_y|=y|+5+g_y|+13
e_x%=x%+10+ma|+15
FOR i|=0 TO n|-1
TEXT x%+10,e_y|+i|*12,text$(i|+1)+":"
NEXT i|
'
ADD e_y|,2
FOR i|=0 TO n|-1
ex%=e_x%
REPEAT
INC zeichen&
TEXT ex%,e_y|+i|*12,"_"
ADD ex%,9
UNTIL ex%>x%+b_breite%-18
NEXT i|
DIV zeichen&,n|
SUB e_y|,2
'
xl1%=x%+10
xl2%=x%+154
yl1|=y|+b_hÖhe%-22
yl2|=y|+b_hÖhe%-10
xr1%=x%+b_breite%-164
xr2%=x%+b_breite%-10
yr1|=y|+b_hÖhe%-22
yr2|=y|+b_hÖhe%-10
'
BOX xl1%,yl1|,xl2%,yl2|
BOX xr1%,yr1|,xr2%,yr2|
TEXT xl1%+4,yl2|-3,"Eingabe abbrechen"
TEXT xr1%+4,yl2|-3,"Eingabe bestätigen"
'
COLOR 3
PBOX e_x%,e_y|-7,e_x%+7,e_y|+1
GET e_x%,e_y|-7,e_x%+7,e_y|+1,cursor$
COLOR 1
zeile|=1
spalte|=1
e_box
PUT x%-3,y|-2,hintergrund$
'
IF NOT abbruch!
FOR i|=1 TO n|
IF zeiger_z|(i|)
FOR j|=0 TO PRED(zeiger_z|(i|))
edit$(i|)=edit$(i|)+CHR$(edit|(i|,j|))
NEXT j|
ENDIF
NEXT i|
ENDIF
'
ERASE edit|(),zeiger_c|(),zeiger_z|()
RETURN
> PROCEDURE e_box
REPEAT
taste$=INKEY$
IF MOUSEX>xl1% AND MOUSEX<xl2% AND MOUSEY>yl1| AND MOUSEY<yl2| AND MOUSEK=1
abbruch!=TRUE
ende!=TRUE
ELSE IF MOUSEX>xr1% AND MOUSEX<xr2% AND MOUSEY>yr1| AND MOUSEY<yr2| AND MOUSEK=1
ende!=TRUE
ELSE IF taste$<>""
IF LEN(taste$)=1
taste|=ASC(taste$)
ELSE IF LEN(taste$)=2
taste|=ASC(RIGHT$(taste$))
SUB taste|,64
ELSE IF LEN(taste$)>2
taste|=0
ENDIF
SELECT taste|
CASE 1 !Cursor up
IF zeile|>1
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
DEC zeile|
IF zeiger_z|(zeile|)<zeichen&
spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
zeiger_c|(zeile|)=PRED(spalte|)
ELSE
@eintrag_neu
ENDIF
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 2 !Cursor down
IF zeile|<n|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
INC zeile|
IF zeiger_z|(zeile|)<zeichen&
spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
zeiger_c|(zeile|)=PRED(spalte|)
ELSE
@eintrag_neu
ENDIF
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 3 !Cursor right
IF zeiger_c|(zeile|)<zeiger_z|(zeile|)
IF spalte|<zeichen& AND spalte|<=zeiger_z|(zeile|)
' Cursor vor Text und Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
INC spalte|
INC zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ELSE IF spalte|=zeichen& AND zeiger_c|(zeile|)<zeiger_z|(zeile|)
' Cursor am Feldende und vor Textende
@shift(2,PRED(zeichen&),1,edit|(zeile|,zeiger_c|(zeile|)),PRED(zeichen&))
DEC rechts|
INC zeiger_c|(zeile|)
ENDIF
ENDIF
CASE 4 !Cursor left
IF spalte|>1
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
DEC spalte|
DEC zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ELSE IF spalte|=1 AND zeiger_c|(zeile|)>0
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
@shift(1,zeichen&-2,2,edit|(zeile|,PRED(zeiger_c|(zeile|))),1)
DEC zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
IF zeiger_z|(zeile|)-zeiger_c|(zeile|)>=zeichen&
INC rechts|
ENDIF
ENDIF
CASE 13
IF zeile|=n|
ende!=TRUE
ELSE
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
INC zeile|
IF zeiger_z|(zeile|)<zeichen&
spalte|=1
zeiger_c|(zeile|)=0
ELSE
@eintrag_neu
ENDIF
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 8 !Backspace
IF spalte|>1 AND spalte|<zeichen&
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
IF rechts|
char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
DEC rechts|
ELSE
char|=32
ENDIF
position|=PRED(zeichen&)
@shift(spalte|,PRED(zeichen&),PRED(spalte|),char|,position|)
@entf(zeile|,PRED(zeiger_c|(zeile|)),zeiger_z|(zeile|),edit|())
DEC zeiger_c|(zeile|)
DEC zeiger_z|(zeile|)
DEC spalte|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
CASE 127 !Delete
IF spalte|<zeichen& AND zeiger_z|(zeile|)>zeiger_c|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
IF rechts|
char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
DEC rechts|
ELSE
char|=32
ENDIF
position|=PRED(zeichen&)
@shift(SUCC(spalte|),zeichen&-1,spalte|,char|,position|)
@entf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),edit|())
DEC zeiger_z|(zeile|)
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ENDIF
'
CASE 32 TO 126,196 TO 252
IF zeiger_z|(zeile|)<100
IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|=zeichen&
' Cursor am Textende und am Feldende
@shift(2,PRED(zeichen&),1,taste|,PRED(zeichen&))
edit|(zeile|,zeiger_z|(zeile|))=taste|
ELSE IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|<zeichen&
' Cursor am Textende und vor Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
TEXT e_x%+PRED(spalte|)*9,(e_y|)+PRED(zeile|)*12,CHR$(taste|)
INC spalte|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
edit|(zeile|,zeiger_z|(zeile|))=taste|
ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|=PRED(zeichen&)
' Cursor im Text und am Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
@shift(2,PRED(spalte|),1,taste|,PRED(spalte|))
@einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|<zeichen&
' Cursor im Text und vor Feldende
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
@shift(spalte|,zeichen&-2,SUCC(spalte|),taste|,spalte|)
INC spalte|
PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
@einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
IF zeiger_z|(zeile|)-zeiger_c|(zeile|)+spalte|>zeichen&
INC rechts|
ENDIF
ENDIF
INC zeiger_c|(zeile|)
INC zeiger_z|(zeile|)
ENDIF
ENDSELECT
ENDIF
UNTIL ende!=TRUE
CLOSEW #1
RETURN
> PROCEDURE eintrag_neu
spalte|=1
zeiger_c|(zeile|)=0
DEFFILL 0
PBOX e_x%,e_y|-8+PRED(zeile|)*12,e_x%+9*zeichen&,e_y|+2+PRED(zeile|)*12
DEFFILL 1
SUB zeichen&,2
FOR i|=0 TO zeichen&
TEXT e_x%+i|*9,e_y|+PRED(zeile|)*12,CHR$(edit|(zeile|,i|))
NEXT i|
ADD zeichen&,2
rechts|=zeiger_z|(zeile|)-PRED(zeichen&)
RETURN
> PROCEDURE shift(erster|,letzter|,neu|,char|,position|)
GET e_x%+PRED(erster|)*9,e_y|-7+PRED(zeile|)*12,e_x%-1+letzter|*9,e_y|+1+PRED(zeile|)*12,rettung$
PUT e_x%+PRED(neu|)*9,e_y|-7+PRED(zeile|)*12,rettung$
TEXT e_x%+PRED(position|)*9,e_y|+PRED(zeile|)*12,CHR$(char|)
RETURN
> PROCEDURE entf(z|,s|,bis|,VAR a|())
REPEAT
a|(z|,s|)=a|(z|,SUCC(s|))
INC s|
UNTIL s|=>bis|
a|(z|,bis|)=0
RETURN
> PROCEDURE einf(z|,s|,bis|,wert_n|,VAR a|())
REPEAT
wert_a|=a|(z|,s|)
a|(z|,s|)=wert_n|
wert_n|=wert_a|
INC s|
UNTIL s|>bis|
RETURN